package Dao;

import org.springframework.stereotype.Repository;
import pojo.*;

import java.sql.Date;
import java.util.List;


public interface userDao {



    /* 接受用户发送的信息并保存到数据库
    @param userID,roomId,content
    @return success or not
     */
    public int sendMessage(Long userID, Long roomId, String content);

    /* 通过userID查询用户记录
    @param roomID
    @return 房间内所有Message
     */
    public List<message> receiveMessage(Long roomId);

    /* 通过userID查询用户记录
    @param userID
    @return 用户记录
     */
    public user queryUserByID(Long userID);


    /*查询密码
    @param studentId 用户的学生Id
    @return 返回密码
     */
    public Object loginIn(String studentId);


    /*通过studentid查询用户信息

     */
     public user queryUserByStudentId(String studentID);

    /*注册用户
    @param studentId 用户学生id
    @param name 用户名字
    @param password 用户密码
    @return 返回影响行数
     */

    public int register(String studentId,String name,String password);




    /*通过sports_id查询场馆信息
     * @param sports_id 体育运动类别id
     * @return 所有的场馆信息*/

    public List<stadium> queryStadiumBySportsId(String sports_id);

    /* 通过体育馆id查询场地信息和运动类别
    * @param stadium_id 体育场馆的信息 sports_id 运动的类别
    * @return 返回场地集合列表*/
    public List<playground> queryPlaygroundListByStadiumID(Long stadium_id,String sports_id);

    /*通过体育馆和场地的名字查到相关的场地信息
    @param stadiumName 场馆的名字
    @param playgroundName 场地的名字
    @return 返回查询到的操场实例
     */

    public playground queryPlaygroundByName(Long stadiumID,String playgroundName);



    /*通过体育馆的名字查找体育馆
    @param stadiumName 体育馆名字
    @return 返回符合条件的体育馆实体类
     */
    public stadium queryStadiumByName(String stadiumName);

    /* 通过房间号查询房间信息
    @param room_id 要查询的房间号
    @return 返回一个具体的房间列表
     */
    public room queryRoombyRoomID(Long room_id);


    public List<room> queryRoom();


    /* 查找匹配中的房间列表
    @param sports_id 体育运动的种类
    @return 返回满足条件的房间列表结合
     */
    public List<room> queryMatchingRoom(String sports_id);



    /*改变房间的状态
    @param room_id 改变房间的id
    @param 改变的状态
    @return 成功返回 否则0
     */
    public int updateRoomState(Long room_id, int state);


    /* 通过user_id查询用户房间记录
    @param user_id 用户的id
    @return 满足条件的房间列表
     */

    public  List<room> queryRoomOrderByUserID(Long user_id);


    /* 通过房间状态用户查询房间列表
    @param roomstate 房间状态
    @return 满足条件的房间列表
     */

    public  List<room> queryRoomOrderByRoomstate(Long user_id,int roomstate);



   /* 通过房间id查询房间用户ID
   @param room_id 房间id
   @return 返回该房间用户的集合
    */
    public List<user> queryUserIDByRoomID(Long room_id);


    /* 创建房间
    * @ param room 要创建的room对象
    * @return 返回影响的行数*/

    public int createRoom(room room);

    /* 将用户插入room_user表
    @param room_id 房间号
    @param user_id 用户id
    @param state 输或赢 默认0  1赢 2失败
    @param date 进行运动的时间
    @param category 运动类别
    @return 返回影响的行数
     */
    public int joinRoom(Long room_id, Long user_id, Date date,String category);

    public int updateState(Long room_id,Long user_id,int state);




    /*删除一个房间
    @param roomId 要删除的房间id
    @return 返回影响的行数
     */
    public int deleteRoomById(Long roomId);



    /*删除room_user表中的用户
    @param roomId 删除房间的id
    @return 返回影响的行数
     */
    public int deleteUserByRoomId(Long roomId);


    /*退出当前的房间
    @param user_id 用户id room_id 房间id
    @return 返回影响的行数 -1表示失败
     */
    public int exitRoom(Long roomId, Long userID);



    /*根据host_id 日期 场馆场地信息查询房间
    @param host_id 房主id
    @param date 日期
    @param stadiumName
    @param playgroundName
    @return 返回房建类
     */
    public room queryRoomID(Long host_id, Date date,String stadiumName,String playgroundName);




    /*创建房间后改变位图
    @param bitmaps_today 今天预约位图
    @param bitmaps_tomorrow 明天的预约位图
    @return 成功返回影响行数 否则返回-1
     */
    public int updatePlayground(Long playgroundId,String bitmaps_today,String bitmaps_tomorrow);



    /*将一个新的用户信息写回
    @param user 实体类
    @return 返回影响的行数
     */
    public int updateUserPK(user user,String studentID);




    /*改变用户的头像
    * @param studentID 用户学号
    * @param photoURL 用户头像地址*/
    public int updateUserPhoto(String studentID,String photoURL);







}
